//
//  NetHandler.m
//  SDWebImage
//
//  Created by dllo on 9/8/15.
//  Copyright (c) 2015 King. All rights reserved.
//

#import "NetHandler.h"

@implementation NetHandler

+ (void)getDataWithURL:(NSString *)str completion:(void (^)(NSData *data))block
{
    // 1. 创建请求
    
    NSString *urlstr = [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
    NSURL *url = [NSURL URLWithString:urlstr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"GET";
    
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
    NSString *string = [NSString stringWithFormat:@"%@/%lu.aa",path,(unsigned long)[url hash]];
    // 2. 发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        
    // 3. 处理数据
        if (data == nil) {
            // 请求不到数据时 加载本地数据
            NSLog(@"%@",data);
            data = [NSData dataWithContentsOfFile:string];
            block(data);
        }
        else{
            // 有网时得到请求数据 并更新本地数据
            block(data);
            [data writeToFile:string atomically:YES];
        }
    }];
    
    // 封装
    // 目的 1. 简化代码 2. 提高代码的可复用性
    

    // 封装的标志: 如果代码可以重用
    // 封装 : 1. 一段代码只在一个类的内部反复使用 就提取出来放到一个方法里
    //       2. 一段代码在很多类中都会使用 就提取出来放到一个类里 如果这段代码和新的类关系不大(网络请求),就放到 + 方法里 ; 如果和类关系很大,需要使用这个类的一个对象,就放到 - 方法里
    //       3. 当前类使用的体验 ,就创建一个类的类目(UIButton创建 , UIView frame的改变)
    
    
    //  封装要注意的: 1. 封装要保证独特的功能性 不要大杂烩
    //              2. 封装的可读性
    //              3. 封装要保证安全性(内存,Bug处理)
    //              4. 封装是一个长期性的活动 要确保有维护

}

@end
